﻿#include "loadingwidget.h"

LoadingWidget::LoadingWidget(QWidget *parent)
    : QWidget(parent), m_rotation(0), m_color(Qt::blue), m_size(50)
{
    // 设置默认大小
    setFixedSize(m_size, m_size);

    // 初始化定时器
    m_timer = new QTimer(this);
    connect(m_timer, &QTimer::timeout, this, &LoadingWidget::updateRotation);
    m_timer->start(25); // 每 50 毫秒更新一次
}
// 设置加载条颜色
void LoadingWidget::setColor(const QColor &color)
{
    m_color = color;
    update(); // 触发重绘
}

// 设置加载条大小
void LoadingWidget::setSize(int size)
{
    m_size = size;
    setFixedSize(m_size, m_size); // 设置控件大小
    update(); // 触发重绘
}

// 更新旋转角度
void LoadingWidget::paintEvent(QPaintEvent *event)
{
    Q_UNUSED(event);

    QPainter painter(this);
    painter.setRenderHint(QPainter::Antialiasing);

    // 计算绘制区域
    int padding = 5; // 内边距
    int arcSize = m_size - 2 * padding; // 圆弧大小

    // 设置画笔
    QPen pen;
    pen.setColor(m_color);
    pen.setWidth(4); // 设置线条宽度
    painter.setPen(pen);

    // 绘制圆弧
    QRectF rect(padding, padding, arcSize, arcSize);
    int startAngle = m_rotation * 16; // 起始角度
    int spanAngle = 120 * 16; // 圆弧跨度
    painter.drawArc(rect, startAngle, spanAngle);
}

// 重写 paintEvent 方法，绘制圆形转动加载条
void LoadingWidget::updateRotation()
{
    m_rotation += 10; // 每次旋转 10 度
    if (m_rotation >= 360)
    {
        m_rotation = 0;
    }
    update(); // 触发重绘
}
